package com.cuz.daileetcode.utils.graph;

import java.util.ArrayList;
import java.util.List;


/**
 * @author cuzz
 * @version 1.0
 * @description: 节点 ，描述当前节点的值等信息
 * @date 21:55 2021/12/8
 **/
public class Node<T> {

    /***
     * 当前节点的值
     */
    public T value;
    /***
     * 当前节点的入读，指有多少个节点指向此节点
     */
    public int in;
    /**
     * 出度 表示此节点指向了多少个出度
     */
    public int out;
    /***
     * 当前节点指向的所有节点
     */
    public ArrayList<Node<T>> nexts;
    /***
     * 当前节点出发的所有边
     */
    public List<Edge<T>> edges;

    private Node() {

    }

    /****
     * 新建一个节点，指定节点的值
     * @param value 当前节点的值
     * @return 初始化该节点
     */
    public static <T> Node<T> create(T value) {
        Node<T> instance = new Node<>();
        instance.value = value;
        instance.in = 0;
        instance.out = 0;
        instance.nexts = new ArrayList<>();
        instance.edges = new ArrayList<>();
        return instance;
    }
}
